慢人一拍,怎么弯道超车?基础不好,怎么迎头赶上?——编程经验漫谈
读过上篇文章《30了,程序员中的老司机们,30后的路该开向哪里?》后,一些朋友说,文章写出了他的迷茫和困惑,问我该怎么办,先是向我倾吐满腹口水,再是真诚向我说抱歉。那篇文章谈了一些针对程序员的职场看法。这篇文章从我自身经验出发,分享下怎么克服自己的心理阴影,在编程的道路上不断自信起来,并不断走出舒适区,挑战未知和恐惧。
慢人一拍,怎么办?
说说我自己怎么慢人一拍的。
高中毕业才开始摸键盘、接触计算机。而我身边的一些朋友,小学的时候就开始玩各种电脑了。
大学时代,靠 QQ 聊天才学会打字。城市里的同学,小学时打字的速度就赶上你说话的速度了。
近大四才学会怎么写出正确的 C 语言版本 Hello World 程序。这个时间点,离 C 语言课程结束已有一两年。阅读了《C++ Primer Plus》这本书后,我才知道原来之前的写法都 TMD 完全不讲究,甚至错漏百出。
大学没实习过。没实习这个 Sense 不说,周边也没什么公司,没什么机会,可能也没能力搞定实习。北京这边的学生,尤其我所在公司附近的北大清华学生,经常大一就开始实习。大学毕业时,可能人家已经实习了好几次了,并且呆过的可能都是好公司,其中不乏 BAT 甚至知名 IT 外企。
机器学习工作两三年内基本没接触过。什么 SVM, CRF,决策树,一个也没听过。相比之下,现在的很多大学生们,大一就对各种机器学习算法如数家珍。
别说这些专业技能慢人一拍了,80 后的我们,很多都没能赶上最后一波利好——读书的时候,学校开始收钱了,然后学费变贵了,毕业不安排工作了,毕业了房价飞涨一年努力买不起一平米厕所了……
慢人一拍怎么办?等死吗?「长江后浪推前浪」,眼看后浪就要汹涌而来了,难道在滩头等着被潮流拍死么?
其实没什么好办法。几句老话说的好,「勤能补拙是良训,一分辛苦一分才。」咱们万里长征从头越,一步一个脚印慢慢来。
如果因为慢人一拍,你搞不定研发岗位,怎么办?不妨先从测试做起也没关系。我一个好朋友,刚毕业的一年多,就是做的软件测试,现在已经是某知名公司的研发骨干了。一时搞不定,我们不妨心放宽,目光放远,放长线钓大鱼。软件开发不一定就 Low,要知道还有个测试驱动开发的理念呢。做好测试的本职工作,说不定对后续做开发也大有裨益。
如果因为慢人一拍,你搞不定大公司,怎么办?不妨先从小公司做起。我最开始找实习的时候,投递了几十个简历,最后也没有搞定什么大公司的 Offer,后来去了一家不到十个人的小公司。那会连公司的前台都是男同事,让我们向别人介绍时,真真是难为情。小公司学什么?怎么学?不妨看看我之前的分享文章:《实习经验分享之一 | 在小公司,实习生和职场新人,学什么?怎么学?》。这里简单总结下就是:1,吃透代码。2,做好安排给自己的事情。3,不要隐藏自己的缺点,多向他人学习。4,多读书,多读经典书籍。5,多做笔记,多思考,多总结。6,多要活,实践出真知。
如果因为慢人一拍,搞不定公司的核心部门或者核心岗位,怎么办?不妨从周边部门,或者是非核心岗位做起。只要是相关的部门,平时总有这样那样的交集,有交集就能够认识,就能够请假。只要你足够聪明,足够努力,多请教同事,多总结经验,总有一天有机会转到相关岗位。职场中,只有你有能力,老板们都希望每个员工的产出能够最大化。
基础不好,怎么办?
说说我自己怎么基础不好的。
C 语言,考试 60 分左右,危险过境。没能够正经写上一百行代码。
操作系统课学习差,基本命令不熟悉。
编译原理,系统架构等课程没开设。
C++ 没开课。那么复杂的语言,只能靠自己硬啃。
模式识别、神经网络的课程开设过,但是基本没人听懂。那会大概 06,07年,机器学习还没热起来,老师教得没激情,学生学习也没劲。
我基础不好啊,可怎么办呀?破罐子破摔吧,反正自己不聪明,赶上别人遥遥无期,咱何必痴人做梦?
男人当自强,怎么能破罐子破摔呢?基础不好补基础呗。不是听说缺什么就吃什么补什么么,那基础不好吃什么来补?
C 语言不好,很正常。可能是因为老师不行,可能是因为没钱没电脑,缺少上机实战机会。也有可能你不是科班出身,是从电信系、物理系、数学系转计算机系来的,或者业余感兴趣自学计算机课程的,所以 C 语言基础不好。没关系,补吧。从《C 程序设计语言》开始看起,接着看《C 与指针》,《C 专家编程》等书籍。找个好的 IDE,多敲敲代码。找个好的开源项目,读读代码,好的代码是最好的导师——「模仿是最好的老师」。
操作系统、网络编程、编译原理等都不懂,没关系,学吧。学霸都是学出来的,更何况我们。找本操作系统的教材,找本 Linux 操作系统的源码解析书籍,找本《Unix 环境高级编程》和《Unix 网络编程》,咱们从操作系统和网络编程学起吧。一切都刚刚好,只要有开始,只能能坚持,一切都不会太迟。「亡羊补牢未为晚也」。
机器学习没学过,没关系。数学大学的时候学得不错,这会早还给老师了,没关系。买几本数学教材,我们温故而知新。买点机器学习教材,买些语音、语言、视觉等领域的书籍,大概了解下机器学习在语音、语言、视觉等主要的几个领域的一些典型应用,以及典型的算法。有兴趣的话,了解一下有哪些主流的机器学习平台,常用的工具包,下载几个数据集,按照教程,自己跑一跑实验,看看输入是什么,输出是什么,中间的迭代过程怎么样,参数有哪些,调试信息有哪些。
基础差没关系,咱就当没基础。基础好的同学,不也是从 0 开始学起的么。从 0 到 1 重新走一遍,长征路漫漫,坚持坚持,基础都能补上。有求知心,有耐心,有恒心,总有一天能开心。
相关经验分享
多读书,多读好书。比如编程语言的各种四书五经,各种 Think in xxx, Effective xxx, More Effective xxx等都是久经考验的口碑好书。软件工程方面的经验之谈,比如《代码大全》、《重构》等都是历久弥新的佳作。好书能耐百回读。一些经典的书籍,其实是可以常读常新的,比如我读过两三遍《代码大全》,学生时代读,和工作两三年后阅读,就有截然不同的体验。
多读代码,多读好代码。比如读读浏览器的代码,分布式系统的代码,分布式计算的代码,操作系统的代码,机器学习的代码。随便找一个项目都行,深入阅读,吃透它,掌握它。和读文学书籍一样,读得多没什么用,能不能读透才是关键。
多写代码,勤能补拙。书读得多的,不见得写文章写得好。同样的道理,看的代码多,审美上来了,却可能眼高手低。常常练笔,才能写就华章。常常写代码,才能写出简洁美观的高质量代码。
多挑别人代码的问题。正如写作,如果你看到一些二三流作家的作品,能发现问题,并就一些字句,或者段落提出自己的一些改进意见,那么相信自己的写作能力也会得到提升。写代码一个很好的捷径是,尝试找找我们的 Leader 代码里的问题,看看是否有可以超越自己领导的地方。万事开头难,万事从头起,今天你能发现一个拼写的问题,明天你可能就能发现一个性能的问题,明年说不定就能发现一些设计的问题了。只有心存卓越,有意看齐,并尝试超越,才能给自己足够的目标,以及朝着这个目标的方向感和动力。
多改自己的代码,严以律己。在提交 Code Review 之前,先自己本地看一看,尝试找出问题。不要放过任何一个小瑕疵,也要假设同事在给自己审查代码的时候,会吹毛求疵,这样才会有心理压力——有压力才有动力。曹雪芹写《红楼梦》,「批阅十载,增删五次」;鲁迅写文章则是:「写完之后至少看两遍,竭力将可有可无的字、句、段删去,毫不可惜。」(《答北斗杂志社问》),「我做完之后,总要看两遍,自己觉得拗口的,就增删几个字,一定要它读得顺口」(《我怎么做起小说来》)。写代码虽然不是千秋功业,但是保不定出现哪天读自己的代码看不懂的尴尬场面,因此还是严以律己的好,能删则删(代码复用等),能润色则润色(函数名、变量名可读性等),段落分明(模块化清晰,函数长度合理等)。
涉略不同的领域,扩大技术视野。比如我在学生时代,学习过各种各样的语言,工作后也偶尔看看新的语言的一些特色语法和类库,包括 Java, C++, C, C#, Objective-C, Python, Javascript, Html, CSS, ASP.NET 等,虽然后来很多语言都陌生了,但是没关系,在某些时候,它们总会发生作用。比如,做校园招聘,你可能就前端后端都能简单考察下。要是有个工程师面试全栈工程师,你总不能出动公司各个部门的工程师来面试吧?再比如,哪天你创业了,这些技能至少对你做技术招聘是有帮助的。
设立各个阶段的目标,一步一脚印。其实成长的过程,就是不断超越「偶像」的过程。
在我们读书求学的时候,我们看到师兄们的分享,觉得师兄很厉害,能开发小游戏,真牛;能熟练使用指针而不错漏百出,真是大神。当我们毕业的时候,可能也觉得写个小游戏没什么大不了的,那玩意儿都快成应届生求职简历的标配了。
刚毕业的时候,可能年薪十万,也可能二三十万,这个时候你觉得师兄们年薪四五十万真牛,感觉这辈子年薪五六十万也够干到老了,安安静静当个程序员,一辈子别无他求。也许,快的人毕业了两三年,稍微慢些的毕业三四年,也到了年薪四五十万了。
这个时候,你可能觉得公司里的架构师或者技术专家真牛,技术总监真牛,BAT 的高技术级别的朋友真牛,他们都是技术届大牛、行业内标杆,年薪几十上百万。也许,当我们毕业了十年八年,我们也做到了年薪百万——年薪百万真的不是梦。
神话破灭的那天,我们看到了更高的天空——这时我们发现,身边的朋友,同龄的优秀人才,稍微年长的,也有年薪两三百万的。没关系,路很长,一步步来。比快比不过,我们比比脚程,看谁坚持更久,更稳步而行。
所有的 Leader 都是用来学习,用来看齐,用来超越的。超越不了没关系,我们要有学习的态度,我们要有超越的心。目标之所以有其存在的意义,就是因为目标能够被超越。
「不想当元帅的士兵,不是好士兵。」我们志存高远,目光放长远,总有一天能慢慢走向卓越,超越别人,超越自己。
最后,祝你,也祝我,超越别人,超越自己。
「写代码的老司机们,30后的路该开向哪里?」的系列文章,你可能有兴趣:
☞系列一:写代码还是转管理
☞完结篇:混互联网还是转行收租?
以下求职和职场相关文章,你可能也有兴趣: